package com.qidian.mes.sys.controller;

import com.qidian.common.pojo.MESResult;
import com.qidian.common.util.JSONTools;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;

/**
 * @Author 戴着假发的程序员
 * @Company 起点编程
 * @Description
 * @Time 2024/10/16 下午 1:39
 */
@RestController
@RequestMapping("/upload")
public class UploadController {
    private String fileDir = "D:\\CX647-授课\\temp\\imgs\\";
    @Value("${qiniu-accessKey}")
    private String accessKey;// 自己的访问的key
    @Value("${qiniu-secretKey}")
    private String secretKey;// 密钥
    @Value("${qiniu-bucket}")
    private String bucket;// 空间的名字
    @RequestMapping
    public MESResult upload(@RequestParam(name = "uploadFile") MultipartFile uploadFile){
        // 将文件上传到七牛云服务器
        //构造一个带指定 Region 对象的配置类  里面的参数是可以没有的，是你自己的服务器的标记
        Configuration cfg = new Configuration(Region.region2());
        cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
        // 创建上传管理对象
        UploadManager uploadManager = new UploadManager(cfg);
        //  生成上传凭证
        Auth auth = Auth.create(accessKey, secretKey);
        String upToken = auth.uploadToken(bucket);
        // 开始上传文件
        try {
            // 参数1：数据，我们这里设置的是文件的直接数据
            // 参数2：是文件的名字，我们就默认随机生成一个
            // 参数3：生成的凭证
            Response response = uploadManager.put(uploadFile.getBytes(), null, upToken);
            // 这里response中国的key就是文件的名称
            String json = response.bodyString();
            DefaultPutRet putRet = JSONTools.json2object(json, DefaultPutRet.class);
//            System.out.println(putRet.key);
//            System.out.println(putRet.hash);
            // 访问图片的地址就是，当然前面的固定的url是可以配置在配置文件中。
            String url = "http://slfuji404.hn-bkt.clouddn.com/" + putRet.key;
            // 响应客户端
            return MESResult.success(url); // 这里的url是在MESResutl的data中的。
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    };
    // springMVC中我们可以通过MultipartFile类型的对象来接收一个上传的文件数据
//    @RequestMapping
//    public MESResult upload(@RequestParam(name = "uploadFile") MultipartFile uploadFile){
//        // 注意：这里的MultipartFile并不是java.io中的File。
//        // MultipartFile提供了一些API，方便我们处理这个临时文件。
//        //-----方案1--------------------
//        // 我们可以通过MultipartFile获取一个指向临时文件的输入流
////        InputStream in = uploadFile.getInputStream();
////        OutputStream out = new FileOutputStream("D:\\temp\\head.jpg");
//        // 文件拷贝操作
//        // 方案2 ---------
//        // MultipartFile提供了拷贝文件的API,我们可以通过这些API直接实现文件拷贝操作
//        try {
//            uploadFile.transferTo(new File(fileDir + "head.jpg"));
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//        return MESResult.success();
//    };
}
